package cn.com.guage.dtm.design.pattern.proxy;
// 支付接口
interface Payment {
    void pay(double amount);
}

// 具体支付类，实现支付接口
class RealPayment implements Payment {
    @Override
    public void pay(double amount) {
        System.out.println("成功支付了 " + amount + " 元");
    }
}

// 支付代理类，同样实现支付接口
class PaymentProxy implements Payment {
    private RealPayment realPayment;

    public PaymentProxy() {
        this.realPayment = new RealPayment();
    }

    @Override
    public void pay(double amount) {
        // 在支付前添加额外逻辑，这里进行权限验证
        if (authenticate()) {
            System.out.println("权限验证通过，准备支付...");
            realPayment.pay(amount);
            // 在支付后添加额外逻辑，这里进行日志记录
            logPayment(amount);
        } else {
            System.out.println("权限验证失败，支付被拒绝");
        }
    }

    // 模拟权限验证方法
    private boolean authenticate() {
        // 这里简单返回 true 表示验证通过，实际应用中会有具体验证逻辑
        return true;
    }

    // 模拟日志记录方法
    private void logPayment(double amount) {
        System.out.println("记录支付日志：支付了 " + amount + " 元");
    }
}

// 主类，用于测试代理模式
public class 代理模式 {
    public static void main(String[] args) {
        // 创建支付代理对象
        Payment paymentProxy = new PaymentProxy();
        // 调用代理对象的支付方法
        paymentProxy.pay(500.0);
    }
}
